export default {
  // 为当前模块开启明明空间
  namespaced:true,
  // 模块的state数据
  state:() => ({
    // 购物车的数组，用来存储购物车中每个商品的信息对象
    // 每个商品的信息对象，都包涵以下6个属性
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    // 1.3 更新state中的数据
    cart:JSON.parse(uni.getStorageSync('cart') || '[]'),
  }),
   // 模块中的 mutations 方法
   mutations:{
     // 向购物车添加商品的方法
     addToCart(state, goods) {
       const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
       // console.log(findResult)
       // 如果相等就添加商品数量，如果不等就添加商品详情
       if(!findResult) {
         state.cart.push(goods)
       } else {
         findResult.goods_count++
       }
       // 1.2 通过 commit 方法，调用my_cart命名空间下的 saveToStorage 方法
       this.commit('my_cart/saveToStorage')
     },
     // 1.1将购物车的数据持久化存储到本地 
     saveToStorage(state) {
       uni.setStorageSync('cart',JSON.stringify(state.cart))
     },
     // 2.1 更新购物车中商品的勾选状态
     updateGoodsState(state,goods) {
       // 2.2 根据goods_id 查询购物车中对应的商品信息对象
       const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
       // 2.3 有对应的商品信息对象
       if(findResult) {
         // 2.4 更新对应商品的勾选状态
         findResult.goods_state = goods.goods_state
         // 2.5 持久化村出发到本地
          this.commit('my_cart/saveToStorage')
       }
     },
     // 3.1更新购物车中商品的数量
     updateGoodsCount(state,goods) {
       // 根据goods_id 查询购物车中商品的信息对象
       const findResult = state.cart.find(x => x.goods_id === goods.goods_id) 
       if(findResult) {
         // 更新对应商品的数量
         findResult.goods_count = goods.goods_count
         // 持久化存储到本地
         this.commit('my_cart/saveToStorage')
       }
     },
     // 4.1 根据id 从购物车中删除对应的商品信息
     removeGoodsById(state,goods_id) {
       // 调用数组中的filter 方法进行过滤
       state.cart = state.cart.filter(x => x.goods_id !== goods_id)
       // 持久化的存储到本地
       this.commit('my_cart/saveToStorage')
     },
     // 5.1 更新所有的商品勾选状态
     updateAllGoodsState(state,newState) {
       // 循环更新购物车中每件商品的勾选状态
       state.cart.forEach(x => x.goods_state = newState)
       // 持久化存储到本地
       this.commit('my_cart/saveToStorage')
     }
   },

   // 模块的 getters 属性
   getters: {
      // 统计购物车中商品的总数量
       total(state) {
            // let c = 0
            // // 循环统计商品的数量，累加到变量 c 中
            // state.cart.forEach(goods => c += goods.goods_count)            
            // return c
            return state.cart.reduce((total,item) => total += item.goods_count, 0)
       },
       // 勾选的商品的总数量
       checkedCount(state) {
         // 先使用 filter 方法，从购物车中过滤器已勾选的商品
         // 再使用 reduce 方法，将已勾选的商品总数量进行累加
         // reduce() 的返回值就是已勾选的商品的总数量
         return state.cart.filter(goods => goods.goods_state).reduce((total, item) => total += item.goods_count, 0)
       },      
      // 3.已勾选商品的总价
      checkedGoodsAmountPrice(state) {
        // 先使用 filter 方法，从购物车过滤器中勾选已选商品
        // 在使用 reduce() 方法，将已勾选的商品乘以单价后，进行累加
        // reduce() 的返回值就是已勾选的商品的总价 最后调用 toFixed(2)方法 保留2位小数
        return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count * item.goods_price, 0).toFixed(2)
      }
  } // getters  ending
} // 最外层 ending 